對於參數的輸入方式,BASH利用**$1,.. $9等9的特殊變數來代表參數的順序(位置),$1代表第一個參數,$2代表第二個參數,以此類推,而$0則代表程式本身。現在我的問題來了,我的輸入需要超過10個參數,可是我卻不能使用$10來作為第10個變數,因為BASH會看成是$1後面跟著一個0**。這種情況就要透過shift指令的協助。
shift指令的的用法很簡單,只呼叫一次shift,他就將所有的參數位置一起往左移(shift)一次,也就是**$3變成$2**,$2變成**$1**,以此類推,而原本的**$1就不見了。所以在搭配使用shift指令時,永遠只需要提取當下的參數($1**),然後每提取一次就shift一次,直到取完所有參數。
while [ “$#” -ge “1” ]; do
echo “Current parameter: $1”
shift
done
我使用while命令來測試參數長度($#)是否大於1 (-gt 1),再藉由shift由右往左移動參數,每移位就少一個,直到0為止。
[系列文章]
我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2
我與BASH的每一天 - [9] 正規化表示法 - 1
我與BASH的每一天 - [10] 正規化表示法 - 2
我與BASH的每一天 - [11] 正規化表示法 - 3
我與BASH的每一天 - [12] 正規化表示法 - 4
我與BASH的每一天 - [13] sed - 1
我與BASH的每一天 - [14] sed - 2
我與BASH的每一天 - [15] sed - 3
我與BASH的每一天 - [16] 多條件選擇 - case
我與BASH的每一天 - [17] 建立自動化的暫存檔 - mktemp
我與BASH的每一天 - [18] if 條件判斷的正規化用法
我與BASH的每一天 - [19] 複合式的條件判斷